package org.jeecg.codegeneweb.mapsetfromwo;

import lombok.extern.slf4j.Slf4j;
import org.jeecg.codegeneweb.ParentMapSetFromWebModelVo;
import org.jeecg.codegeneweb.domian.column.ColumnVoDomain;
import org.jeecg.codegeneweb.vo.TableVoDomain;
import org.jeecg.codegeneweb.vo.WebModelVo;
import org.jeecg.common.util.oConvertUtils;
import org.jeecgframework.codegenerate.generate.pojo.ColumnVo;
import org.jeecgframework.codegenerate.generate.pojo.onetomany.MainTableVo;
import org.jeecgframework.codegenerate.generate.pojo.onetomany.SubTableVo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
public class OneToManyMapSet extends ParentMapSetFromWebModelVo {

    @Override
    protected void settableVo(Map<String, Object> hashMap, WebModelVo webModelVo) {
//参考现有的代码
        MainTableVo mainTableVo=new MainTableVo();
        mainTableVo.setTableName(webModelVo.getTableVoDomain().getTableName());
        mainTableVo.setEntityName(webModelVo.getTableVoDomain().getEntityName());
        mainTableVo.setEntityPackage(webModelVo.getPackageName());
        mainTableVo.setFtlDescription(webModelVo.getTableVoDomain().getTableTxt());
        mainTableVo.setSearchFieldNum(1);

        String formTemplate = webModelVo.getTableVoDomain().getFormTemplate();
        if (oConvertUtils.isEmpty(formTemplate)) {
            mainTableVo.setFieldRowNum(1);
        } else {
            mainTableVo.setFieldRowNum(Integer.parseInt(formTemplate));
        }
        hashMap.put("tableVo", mainTableVo);
    }

    @Override
    protected void setCollection(Map<String, Object> hashMap, WebModelVo webModelVo) {
        //设置2个List数组
        List<ColumnVoDomain> columnVoDomainList =webModelVo.getTableVoDomain().getColumnVoDomainList();
        List<ColumnVo> columnVoList=new ArrayList<>();
        for(ColumnVoDomain columnVoDomain : columnVoDomainList){
            ColumnVo columnVo=new ColumnVo();
            columnVo.setFieldName(columnVoDomain.getDbVo().getFieldName());
            System.out.println("当前正在执行的是:"+ columnVoDomain.getDbVo().getFieldName());
            log.info("当前正在执行的是:"+ columnVoDomain.getDbVo().getFieldName());;
            columnVo.setNullable(columnVoDomain.getDbVo().getDbIsNull().toString().equals("1")?"Y":"N");//.getNullable());
            columnVo.setFieldType(columnVoDomain.getDbVo().getFieldType());//.getDbType());
            columnVo.setFieldDbType(columnVoDomain.getDbVo().getDbType());//.getDbFieldName());
            columnVo.setFieldDbName(columnVoDomain.getDbVo().getDbFieldName());//.getFieldType());
            columnVo.setFiledComment(columnVoDomain.getDbVo().getDbFieldTxt());
            columnVo.setClassType(columnVoDomain.getPageVo().getFieldShowType());
            columnVo.setOptionType("");
            columnVo.setCharmaxLength("");
            columnVo.setPrecision(null);
            columnVo.setScale(null);
            columnVo.setClassType_row(columnVoDomain.getPageVo().getFieldShowType());
            columnVo.setDefaultVal(columnVoDomain.getDbVo().getDbDefaultVal());
            columnVo.setFieldLength(columnVoDomain.getDbVo().getDbLength());
            columnVo.setFieldHref("");
            columnVo.setFieldValidType(columnVoDomain.getValidateVo().getFieldValidType());
            columnVo.setFieldDefault("");
            columnVo.setFieldOrderNum(columnVoDomain.getPageVo().getOrderNum());
            columnVo.setFieldShowType(columnVoDomain.getPageVo().getFieldShowType());
            columnVo.setIsKey(columnVoDomain.getDbVo().getDbIsKey().toString().equals("1")?"Y":"N");
            columnVo.setIsQuery(columnVoDomain.getPageVo().getIsQuery().toString().equals("1")?"Y":"N");
            columnVo.setIsShow(columnVoDomain.getPageVo().getIsShowForm().toString().equals("1")?"Y":"N");
            columnVo.setIsShowList(columnVoDomain.getPageVo().getIsShowList().toString().equals("1")?"Y":"N");
            columnVo.setQueryMode(columnVoDomain.getPageVo().getQueryMode());
            columnVo.setReadonly(columnVoDomain.getPageVo().getIsReadOnly().toString().equals("1")?"Y":"N");
            columnVo.setSort(columnVoDomain.getPageVo().getSortFlag());
            columnVo.setFieldOrderNum(columnVoDomain.getPageVo().getOrderNum());
            try {
                columnVo.setDictField(columnVoDomain.getValidateVo().getDictField().length()!=0? columnVoDomain.getValidateVo().getDictField().toString():"");
            }catch (Exception ex){
                System.out.println("错误的位置在columnVo10.setDictField(columnVoDomian.getValidateVo():"+ex.toString());
            }
            columnVo.setDictTable(columnVoDomain.getValidateVo().getDictTable());
            columnVo.setDictText(columnVoDomain.getValidateVo().getDictText());

            columnVoList.add(columnVo);
        }
        hashMap.put("originalColumns", columnVoList);

        List<ColumnVo> newaddedColumn=columnVoList.stream()
                .filter(x->x.getIsShowList().equalsIgnoreCase("Y")||x.getIsShow().equalsIgnoreCase("Y"))
                .collect(Collectors.toList());
        hashMap.put("columns", newaddedColumn);

    }

    public void buildSonTableMap(Map<String, Object> map, WebModelVo webModelVo) {
        for(TableVoDomain td:webModelVo.getTableVoDomain().getSonTabeleVoDomain()){
            SubTableVo subTableVo=new SubTableVo();
            subTableVo.setTableName(td.getTableName());
            subTableVo.setEntityName(td.getEntityName());
            subTableVo.setEntityPackage(webModelVo.getPackageName());
            subTableVo.setFtlDescription(td.getTableTxt());
            subTableVo.setForeignRelationType(td.getForeignRelationType());
            subTableVo.setExtendParams(null);
            subTableVo.setOriginalForeignKeys(td.getOriginalForeignKeys());
            subTableVo.setForeignKeys(td.getForeignKeys());

        }
    }
    public void buildSonTableColumnMap(Map<String, Object> map, WebModelVo webModelVo) {
        List<SubTableVo> subTableVoList=new ArrayList<>();
        for(TableVoDomain tb:webModelVo.getTableVoDomain().getSonTabeleVoDomain()){
            //针对每个子表添加数组
            List<ColumnVoDomain> columnVoDomainList =tb.getColumnVoDomainList();
            List<ColumnVo> columnVo10List=new ArrayList<>();
            //设置2个List数组

            for(ColumnVoDomain columnVoDomain : columnVoDomainList){
                ColumnVo columnVo=new ColumnVo();
                columnVo.setFieldName(columnVoDomain.getDbVo().getFieldName());
                System.out.println("当前正在执行的是:"+ columnVoDomain.getDbVo().getFieldName());
                log.info("当前正在执行的是:"+ columnVoDomain.getDbVo().getFieldName());;
                columnVo.setNullable(columnVoDomain.getDbVo().getDbIsNull().toString().equals("1")?"Y":"N");//.getNullable());
                columnVo.setFieldType(columnVoDomain.getDbVo().getFieldType());//.getDbType());
                columnVo.setFieldDbType(columnVoDomain.getDbVo().getDbType());//.getDbFieldName());
                columnVo.setFieldDbName(columnVoDomain.getDbVo().getDbFieldName());//.getFieldType());
                columnVo.setFiledComment(columnVoDomain.getDbVo().getDbFieldTxt());
                columnVo.setClassType(columnVoDomain.getPageVo().getFieldShowType());
                columnVo.setOptionType("");
                columnVo.setCharmaxLength("");
                columnVo.setPrecision(null);
                columnVo.setScale(null);
                columnVo.setClassType_row(columnVoDomain.getPageVo().getFieldShowType());
                columnVo.setDefaultVal(columnVoDomain.getDbVo().getDbDefaultVal());
                columnVo.setFieldLength(columnVoDomain.getDbVo().getDbLength());
                columnVo.setFieldHref("");
                columnVo.setFieldValidType(columnVoDomain.getValidateVo().getFieldValidType());
                columnVo.setFieldDefault("");
                columnVo.setFieldOrderNum(columnVoDomain.getPageVo().getOrderNum());
                columnVo.setFieldShowType(columnVoDomain.getPageVo().getFieldShowType());
                columnVo.setIsKey(columnVoDomain.getDbVo().getDbIsKey().toString().equals("1")?"Y":"N");
                columnVo.setIsQuery(columnVoDomain.getPageVo().getIsQuery().toString().equals("1")?"Y":"N");
                columnVo.setIsShow(columnVoDomain.getPageVo().getIsShowForm().toString().equals("1")?"Y":"N");
                columnVo.setIsShowList(columnVoDomain.getPageVo().getIsShowList().toString().equals("1")?"Y":"N");
                columnVo.setQueryMode(columnVoDomain.getPageVo().getQueryMode());
                columnVo.setReadonly(columnVoDomain.getPageVo().getIsReadOnly().toString().equals("1")?"Y":"N");
                columnVo.setSort(columnVoDomain.getPageVo().getSortFlag());
                columnVo.setFieldOrderNum(columnVoDomain.getPageVo().getOrderNum());
                try {
                    columnVo.setDictField(columnVoDomain.getValidateVo().getDictField().length()!=0? columnVoDomain.getValidateVo().getDictField().toString():"");

                }catch (Exception ex){
                    System.out.println("错误的位置在columnVo10.setDictField(columnVoDomian.getValidateVo():"+ex.toString());
                }
                columnVo.setDictTable(columnVoDomain.getValidateVo().getDictTable());
                columnVo.setDictText(columnVoDomain.getValidateVo().getDictText());

                columnVo10List.add(columnVo);
            }


            //获取到对应的子表进行赋值
            TableVoDomain tableVoDomain= webModelVo.getTableVoDomain().getSonTabeleVoDomain()
                    .stream()
                    .filter(x->x.getTableName().equals(tb.getTableName()))
                    .findFirst()
                    .get();
            SubTableVo subTableVo=convertTableVoDomainToSubTableVo(tableVoDomain);

            subTableVo.setOriginalColumns(columnVo10List);
            List<ColumnVo> newaddedColumn=columnVo10List.stream()
                    .filter(x->x.getIsShowList().equalsIgnoreCase("Y")||x.getIsShow().equalsIgnoreCase("Y"))
                    .collect(Collectors.toList());
            subTableVo.setColums(newaddedColumn);

            subTableVoList.add(subTableVo);

        }
        map.put("subTables", subTableVoList);
    }

    private static SubTableVo convertTableVoDomainToSubTableVo(TableVoDomain tableVoDomain) {
        SubTableVo  subTableVo=new SubTableVo();
        subTableVo.setTableName(tableVoDomain.getTableName());
        subTableVo.setEntityName(tableVoDomain.getEntityName());
        subTableVo.setFtlDescription(tableVoDomain.getTableTxt());
        subTableVo.setOriginalForeignKeys(tableVoDomain.getForeignKeys());
        subTableVo.setOriginalForeignMainKeys(tableVoDomain.getForeignMainKeys());
        subTableVo.setForeignKeys(tableVoDomain.getForeignKeys());
        subTableVo.setForeignMainKeys(tableVoDomain.getForeignMainKeys());
        subTableVo.setForeignRelationType(tableVoDomain.getForeignRelationType());
        return subTableVo;
    }
}